<?php
/**
 * 微信支付回调
 * Created by Sublime Text 3.
 * @authors Rejeo (rejeo@qq.com)
 * @date    2018-05-19 00:01:13
 */
namespace app\index\controller;

use think\Controller;
use think\Request;
// use wxpay\database\WxPayUnifiedOrder;
// use wxpay\database\WxPayResults;
// use wxpay\NativePay;
// use wxpay\WxPayConfig;
// use wxpay\WxPayApi;
// use wxpay\WxPayNotify;
// use wxpay\PayNotifyCallBack;

/* 微信支付，开发需要下载相应的sdk
需要企业用户级别，才有支付申请一栏，只需要满足微信支付的申请要求即可完成。
在微信支付一栏中，主要查看：开发者配置一栏
    在开发者配置一栏中，除了一些相关配置外，可以按你的需要去（开放）申请使用
什么样的支付功能。
    这里主要使用的是扫码支付，在一些场景中使用扫码支付会有一定的便利性。
如：规定时间内，只能用于某个网址等等。

扫码支付中的两种模式：
    模式一：需要填写相关的支付回调URL。
    模式二：对相关的回调地址对相关的配置。
    模式二比模式一，流程更为简单，不依赖设置的回调支付URL。
    详细查看开发者文档！

在SDK中的 Lib 文件下做相关配置
    有：APPID(绑定支付的APPID)、MCHID(商户号)、KEY(商户支付密匙)、
        APPSCERET(公众号的secert，仅只是JSAPI)
    1、需要设置商户证书路径（扫码支付不会用到）
*/
class Weixinpay extends Controller
{
    public function notify()
    {
        // 获取支付数据流
        // php://input 是个可以访问请求的原始数据的只读流
        // enctype="multipart/form-data" 的时候 php://input 是无效的。
        // $weixinData = file_get_contents("php://input");
        // file_put_contents('D:/wamp64/www/tp5shop/public/wxdata.txt', $weixinData, FILE_APPEND);
        /*
        // 处理数据流
        try {
            $result = new WxPayResults();
            $weixinData = $result->Init($weixinData);
        } catch (\Exception $e) {
            $result->setData('return_code', 'FALI');
            $result->setData('return_msg', $e->getMessage());
            return $result->toXml();
        }
        if ('FALI' === $weixinData['return_code'] || 'SUCCESS' !== $weixinData['result_code']) {
            $result->setData('return_code', 'FALI');
            $result->setData('return_msg', 'error');
            return $result->toXml();
        }

        // 根据out_trade_to 查询订单数据
        $outTradeTo = $weixinData['out_trade_no'];
        $order = model('Order')->get(['out_trade_no'=>$outTradeTo]);
        if (!$order || $order->pay_status == 1) {
            $result->setData('return_code', 'SUCCESS');
            $result->setData('return_msg', 'OK');
            return $result->toXml();
        }

        // 更新数据
        try {
            $orderRes = model('Order')->updateOrderByOutTradeNo($outTradeTo, $weixinData);
            $dealRes = model('Deal')->updateByCountById($order->deal_id, $order->deal_count);
            // 消费券生成
            $coupons = [
                'sn' => $outTradeTo,
                'password' => mt_rand(100000, 999999),
                'user_id' => $order->user_id,
                'deal_id' => $order->deal_id,
                'order_id' => $order->id,
            ];
            model('Coupons')->add($coupons);

        } catch (\Exception $e) {
            return false;
        }

        $result->setData('return_code', 'SUCCESS');
        $result->setData('return_msg', 'OK');
        return $result->toXml();*/

    }

    public function wxpayQCode($id)
    {
        // 微信支付源码，对应开发文档中的api列表下的统一下单中的参数
        /*$input = new WxPayUnifiedOrder();
        $input->SetBody("test");
        $input->SetAttach("test");
        $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
        $input->SetTotal_fee("1");
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url("test");
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id("2233");
        $result = $notify->GetPayUrl($input);
        $url2 = $result['code_url'];*/
        // 使用下面这样的封装方式，或者自己在封装一下
        /*$notify = new NativePay();
        $input = new WxPayUnifiedOrder();
        $input->setBody("支付 0.01元");
        $input->setAttach("支付 0.01元");
        $input->setOutTradeNo(WxPayConfig::MCHID.date("YmdHis"));
        $input->setTotalFee("1");
        $input->setTimeStart(date("YmdHis"));
        $input->setTimeExpire(date("YmdHis", time() + 600));
        $input->setGoodsTag("QRCode");
        $input->setNotifyUrl("index.php/index/weixinpay/notify");// 回调url
        $input->setTradeType("NATIVE");// 支付方式
        $input->setProductId($id);// 商品ID
        $result = $notify->getPayUrl($input);
        $url = empty($result['code_url']) ? '' : $result['code_url'];
        return '<img alt="扫码支付" src="qrcode.php?data='.urlencode($url).'" >';*/
    }
}
